<?php

/**
 * Description of class Gebruiker
 * Klassen om gebruikers te registreren, aan te passen, verwijderen of op te halen ter controle.
 * 
 * @version 0.1
 * @author Sander van Belleghem
 * 
 */

require_once FILE_DB_GEBRUIKER;

class Gebruiker {
    
    private $gebruiker_id = '';
    private $voornaam = '';
    private $achternaam = ''; 
    private $login_naam = ''; 
    private $wachtwoord = ''; 
    private $recht_groep_id = '';
    private $sessie_id = '';
    private $login_time = '';
    
    public function __construct($gebruiker_id = '') {        
        $this->gebruiker_id = $gebruiker_id;
    }

    // Getters    
    public function getGebruikerId(){
        return $this->gebruiker_id;
    }

    public function getAchternaam() {
        return $this->achternaam;
    }  
        
    public function getLoginNaam() {
        return $this->login_naam;
    }  
        
    public function getRechtGroepId() {
        return $this->recht_groep_id;
    }  
    
    public function getVoornaam() {
        return $this->voornaam;
    }

    public function getWachtwoord() {
        return $this->wachtwoord;
    }  
    
    public function getSessie_Id(){
        return $this->sessie_id;
    }
    
    public function getLoginTime(){
        return $this->login_time;
    }

    // Setters   
    public function setGebruikerId($gebruiker_id){
        $this->gebruiker_id = $gebruiker_id;
    }


    public function setAchternaam($achternaam) {
        if (empty($achternaam)) {
            throw new Exception(GEBRUIKER_ERROR_GEENACHTERNAAM);
        }
        $this->achternaam = $achternaam;
    }
    
    public function setLoginNaam($login_naam) {
        if (empty($login_naam)) {
            throw new Exception(GEBRUIKER_ERROR_GEENUSERNAME);
        }
        $this->login_naam = $login_naam;
    }

    public function setRechtGroepId($recht_groep_id) {
        if (empty($recht_groep_id)) {
            throw new Exception(GEBRUIKER_ERROR_GEENRECHTENID);
        }
        $this->recht_groep_id = $recht_groep_id;
    }  
    
    public function setVoornaam($voornaam) {
        if (empty($voornaam)) {
            throw new Exception(GEBRUIKER_ERROR_GEENVOORNAAM);
        }
        $this->voornaam = $voornaam;
    }
        
    public function setWachtwoord($wachtwoord) {
        if (empty($wachtwoord)) {
            throw new Exception(GEBRUIKER_ERROR_GEENWACHTWOORD);
        }
        $this->wachtwoord = md5($wachtwoord);
    }
    
    public function setOudeWachtwoord($oude_wachtwoord) {
        if (empty($oude_wachtwoord)) {
            throw new Exception(GEBRUIKER_ERROR_GEENWACHTWOORD);
        }
        $this->oude_wachtwoord = md5($oude_wachtwoord);
    }
    
    public function setSessie_Id($sessie_id) {
        $this->sessie_id = $sessie_id;
    }
    
    public function setLoginTime($login_time) {
        if (empty($login_time)){
            return false;
        }
        $this->login_time = $login_time;
    }

    public function delete() {
        $db_gebruiker = new DbGebruiker($this->gebruiker_id);
        $db_gebruiker->delete();
    }
    
    public function getGebruikersRecht(){
        $db_gebruiker = new DbGebruiker();
        $db_gebruiker->setGebruikerId($this->gebruiker_id);
       
        return $db_gebruiker->getGebruikersRecht();
    }
    
    public function save() {
        $db_gebruiker = new DbGebruiker();
        $db_gebruiker->save($this->voornaam, $this->achternaam, $this->login_naam, $this->wachtwoord, $this->recht_groep_id, $this->sessie_id, $this->login_time);
    }
    
    public function update() {
        $db_gebruiker = new DbGebruiker($this->gebruiker_id);
        $db_gebruiker->update($this->voornaam, $this->achternaam, $this->login_naam, $this->wachtwoord, $this->recht_groep_id, $this->login_time);
    }
    
    public function updateLoginTime(){
        $db_gebruiker = new DbGebruiker($this->gebruiker_id);
        $db_gebruiker->updateLoginTime($this->login_time);
    }
    
    public function updateGebruikerRechtGroep(){
        $db_gebruiker = new DbGebruiker($this->gebruiker_id);
        
        echo __FUNCTION__. ' ' .__FILE__.__LINE__.'<br />';
        echo '<pre>';
        var_dump($this->recht_groep_id);
        echo '</pre>';
        
        $db_gebruiker->updateGebruikerRechtGroep($this->recht_groep_id);
    }
    
    public function wachtwoordBestaat(){
        $db_gebruiker = new DbGebruiker();
        // Function $db_gebruiker->wachtwoordBestaat() returns true when password excists.
        if($db_gebruiker->wachtwoordBestaat($this->wachtwoord) == true){
            return true;
        }
    }
    
    public function updateWachtwoord(){
        $db_gebruiker = new DbGebruiker($this->gebruiker_id);
        if($db_gebruiker->checkWachtwoord($this->oude_wachtwoord) == true ){
            if($db_gebruiker->wachtwoordBestaat($this->wachtwoord) == false ){
                if($db_gebruiker->updateWachtwoord($this->wachtwoord) == true ){
            
                    return true;
                }
            }
        }
    }
    
    public function registreren() {
        $db_gebruiker = new DbGebruiker();
        $db_gebruiker->registreren($this->login_naam, $this->wachtwoord, $this->recht_groep_id, $this->sessie_id, $this->login_time);
    }    
}

class TestGebruiker {
    
    public function TestGebruiker() {
        try {
            $test = new Gebruiker();
            
            $test->setVoornaam(GEBRUIKER_TEST_VOORNAAM);
            $test->setAchternaam(GEBRUIKER_TEST_ACHTERNAAM);
            $test->setLoginNaam(GEBRUIKER_TEST_USERNAME);
            $test->setWachtwoord(GEBRUIKER_TEST_WACHTWOORD);
            $test->setRechtId(GEBRUIKER_TEST_RECHTENBITFIELD);
            $test->save();
            
            echo "<pre>";
            $this->test_var_dump($test);
            echo "</pre>";    
        }
        
        //Catch exception
        catch(Exception $e) {
            echo 'Message : ' .$e->getMessage() . '<pre>' .$e->getTraceAsString(). '</pre>';
            
            $this->test_var_dump($test);
        }
    }

    private function test_var_dump($var) {

        echo "<pre>";
        var_dump($var);
        echo "</pre>";
    }
}
?>
